#ifndef _SHM_H
#define _SHM_H

#include "defs.h"

#define SHM_PAGE_BEGIN 0x00800000
#define SHM_PAGE_NEXT  0x00001000
#define SHM_COUNT 32
/*
 * Tipo de datos: shmT
 * --------------------
 * Estructura que encapsula la informacion necesaria para controlar una
 * shared memory.
 */
typedef struct shmT {
	int sem;
	void * dir;
	int countproc;
	int processes[TASKS_COUNT];
} shmT;

/*
 * Funcion: initShm
 * -----------------
 * Inicializa la estructura del IPC
 */
void initShm(void);

/*
 * Funcion: shmAt
 * ---------------
 * Devuelve un puntero al segmento de memoria compartida identificado
 * por el id recibido por parametro o NULL si no hay ninguno libre
 */
void * shmAt(int shmid);


/*
 * Funcion: shmDt
 * ---------------
 *
 */
int shmDt(int shmid);


/*
 * Funcion: semGet
 * ---------------
 *
 */
int * semGet(int semid);

/*
 * Funcion: pSem
 * ---------------
 * baja el semaforo
 */
void pSem(int * sem);

/*
 * Funcion: vSem
 * ---------------
 * sube el semaforo
 */
void vSem(int * sem);

#endif /* _SHM_H */
